【问题描述】
使用OpenPyXL包将Excel工作表中指定的单元格区域(如C3:E6)中的数据导入到pandas的DataFrame中;或者反过来,将DataFrame中的数据写入到Excel工作表中的指定单元格区域。[大谦Excel,dqexcel点com]
【示例2-9】
本例使用的Excel文件的完整路径为“D:/Samples/ch02/06 局部区域数据的导入和导出(与OpenPyXL交互)/资产记录.xlsx”。该文件打开后如图2-8所示,是某单位各种设备的信息记录。要求用OpenPyXL打开该Excel文件,将B1:D6范围内的数据读取到DataFrame。然后用OpenPyXL将读取的数据写入到Excel工作表中的A22处。
图2-8 某单位资产记录
- 编写下面的代码:
code.python
import openpyxl
import pandas as pd
# 打开 Excel 文件
wb = openpyxl.load_workbook('D:/Samples/ch02/06 局部区域数据的导入和导出(与OpenPyXL交互)/资产记录.xlsx')
# 获取第一个工作表
sheet = wb.worksheets[0]
# 读取 B1:D6 范围内的数据到 DataFrame
data = []
for row in sheet.iter_rows(min_row=1, max_row=6, min_col=2, max_col=4):
data.append([cell.value for cell in row])
df = pd.DataFrame(data, columns=['名称', '购置日期', '价值'])
# 输出读取的数据
print(df)
# 将读取的数据写入 Excel 工作表中的 A22 处
for i in range(len(data)):
for j in range(len(data[i])):
sheet.cell(row=i+22, column=j+1).value = data[i][j]
# 保存,退出
wb.save('D:/Samples/ch02/06 局部区域数据的导入和导出(与OpenPyXL交互)/资产记录.xlsx')
wb.close()
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出导入的数据。
code.python
>>> == RESTART: D:/samples/ 1.py =
名称 购置日期 价值
0 部门 资产名称 数量
1 办公室 长安SC6408BS 1
2 办公室 井架 1
3 财务室 搅拌机 1
4 办公室 塔吊QT40 1
5 办公室 塔吊QT50 1
重新打开Excel数据文件,会发现在第一个工作表的A22处写入了B1:D6范围内的数据。
【知识点扩展】
使用OpenPyXL,用工作表对象的iter_rows方法,可以将Excel工作表中指定单元格区域内的数据读取到一个列表中,然后将该列表转换为DataFrame。例如,下面的代码将工作表sheet中单元格区域B1:D6内的数据读取到列表data中,然后将该列表转换为df,df是一个DataFrame。
code.python
data = []
for row in sheet.iter_rows(min_row=1, max_row=6, min_col=2, max_col=4):
data.append([cell.value for cell in row])
df = pd.DataFrame(data, columns=['名称', '购置日期', '价值'])
反过来,将DataFrame中的数据写入到工作表的指定单元格区域,可以用嵌套的for循环将数据逐个写入,如下面代码所示。
code.python
for i in range(len(data)):
for j in range(len(data[i])):
sheet.cell(row=i+22, column=j+1).value = data[i][j]